/*
 * @Author: your name
 * @Date: 2021-06-12 21:54:35
 * @LastEditTime: 2021-12-08 22:37:25
 * @LastEditors: Please set LastEditors
 * @Description: 设置项管理类，包含常用数据类型
 * @FilePath: \telescope1080P\src\item.h
 */
#ifndef ITEM_H
#define ITEM_H
#include "xlog.h"
#include <iostream>
class Item
{
public:
    Item();
    virtual ~Item() = default;
    void Init();
    void SetTrText(std::string value);
    /**
     * @brief Get the Tr Text object
     * 获取设置项名称译文，少数情况下派生类可重载输入其它值。
     * @return std::string 
     */
    virtual std::string GetTrText();
    void SetText(std::string value);
    std::string GetText();
    void SetValueStyle(std::string value);
    std::string GetValueStyle();
    void SetValueInt(unsigned int value);
    unsigned int GetValueInt();
    /**
     * @brief Get the String object
     * 获取在界面渲染的字符串，根据具体的属性添加单位或者其它字符再显示，需要重载实现
     * 默认返回原始字符串，如果需要封装数据，需要重载实现。
     * @return std::string 
     */
    virtual std::string GetString();
    /**
     * @brief Get the String Send object
     * 获取拨号号码
     * @return ** std::string 
     */
    virtual std::string GetStringSend();
    std::string GetStringTrText();
    void SetStringTrText(std::string trText);
    void SetIsInvolved(bool value);
    bool GetIsInvolved();
    void SetRange(unsigned int minInt, unsigned int maxInt);
    unsigned int GetMinValueInt();
    unsigned int GetMaxValueInt();
    void SetOnAndOff(bool value);
    bool GetOnAndOff();
    void SetHidden(bool value);
    bool GetHidden();
    void SetEnterItem(bool value);
    bool GetEnterItem();
    /**
     * @brief 
     * 抽象方法，由派生设置项类继承并重写。
     */
    virtual void EnterItemSpecialInit() {}

private:
    /**
     * @brief 
     * 该参数的名称译文，可选
     */
    std::string trText;
    /**
     * @brief 
     * 该参数的译文值，一般是具有双语参数值的译文
     */
    std::string valueTrText;
    /**
     * @brief 
     * 该参数的utf-8编码的值，一般是数字或其它无多语言翻译的值
     */
    std::string text;
    /**
     * @brief 
     * 该参数的属性值，一般是用于固定图片数据的设置项
     */
    std::string style;
    /**
     * @brief 
     * 图片类型的值，图片的绝对路径
     */
    std::string image;
    /**
     * @brief 
     * “开关”设置项，true为开，false为关
     */
    bool onAndOff;
    /**
     * @brief 
     * 整型数据值
     */
    unsigned int valueInt;
    /**
     * @brief 
     * valueInt 最小值
     */
    unsigned int min;
    /**
     * @brief 
     * valueInt 最大值
     */
    unsigned int max;
    /**
     * @brief 
     * 复杂的关联设置项，用于icon需要显示状态时判断是否根据数据渲染界面
     */
    bool isInvolved;
    /**
     * @brief 
     * 是否隐藏，适用于某些设置项需要按需显示的场景。暂未使用
     */
    bool hidden;
    /**
     * @brief 
     * 是否为打开新界面设置项
     */
    bool enterItem;
};
#endif